package com.amin.concurrent;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableDemo {
	/**
	 * Callable是一个接口，一个类只要实现了Callable接口，就是一个线程类 jdk1.5引入的 和Runnable对比：
	 * 1.run()不能抛异常的，但是call()方法可以抛异常
	 * 2.run()返回值只能是void，但是call()返回值可以是任意类型，并且此值可以拿到
	 * 说明：Callable只能通过线程池来启动，不能通过new Thread().start();
	 * 
	 */
	public static void main(String[] args) throws Exception {
		ExecutorService es = Executors.newCachedThreadPool();
		// Future对象可以用于获取call()方法的返回值，可以根据返回值做相关的业务控制
		Future<String> future = es.submit(new CallRunner());
		System.out.println(future.get());
	}
}

class CallRunner implements Callable<String> {
	public String call() throws Exception {
		System.out.println("线程正在工作");
		return "success";
	}
}
